package com.music.glide.load.model

import com.music.glide.load.KKey
import com.music.glide.load.KOptions
import com.music.glide.load.data.KDataFetcher

/**
 * 将任意复杂的数据模型（Model）翻译为可用于获取资源的具体数据类型（Data）
 *
 * 根据视图的尺寸（宽度和高度）加载指定大小的资源，从而优化资源加载。
 *
 */

interface KModelLoader<Model, Data> {


    data class LoadData<Data>(
        val key: KKey,
        val alternateKeys: List<KKey> = listOf(),
        val fetcher: KDataFetcher<Data>
    )

    fun buildLoadData(model: Model, width: Int, height: Int, options: KOptions): LoadData<Data>


    /**
     * 判断 ModelLoader 是否能够处理指定的模型类型
     */
    fun handles(model: Model): Boolean
}